#ifndef _Player
#define _Player

#include <QApplication>
#include <iostream>
#include <sstream>
#include <string>
#include <QtGui>
#include <map>

#include "Card.h"
#include "PokerTool.h"

using namespace std;

class Player
{
	public:
		Card hand[2];

	private:
		// Network data
		QString ip;
		QString port;
		// nom du joueur
		QString name;
		//position du joueur
		int position;

		// Bankroll (Fond) : Somme d’argent disponible pour jouer.
		int bankroll;

		// Somme qu'à misé le joueur depuis le début de la partie
		// TO RENAME
		int mise;

		// Mise en cours, somme qu'a misé le joueur sur 1 coup
		// Miser : Mettre de l’argent dans le pot. (bet)
		int bet;

		// Mise minimun que doit apoorter le joueur pour pouvoir suivre
		int amountToCall;

		// TO BE DELETED ?
		int amountRaised;

		//Sttatégie du joueur
		QString strategy;

		// Action qu'a choisit le joueur
		QString action;

		int fitness;
		// Combinaison du joueur
		QString combinationLabel;

	public:
	  // Constructor and operator
	  Player(QString nom);
	  Player();
	  Player(const Player & player);
	  Player & operator = (const Player & player);

	  // variable mise retourné sous forme de string
	  string getSommeMiseString();
	  int getMise();

	  // Getter
	  QString getIp();
	  QString getPort();
	  QString getName();
	  Card getCard(int numCard);
	  QString getAction();
	  string getBankroll();
	  int getBankrollInt();
	  int getBetInt();
	  int getPosition();
	  int getAmount();
	  // TODO: mise
	  string getBet();
	  QString getStrategy();
	  int getAmountRaised();
	  int getAmountToCall();
	  int getAction(string act);
	  int getFitness();
      QString getCombinationLabel();

	  //Retourne la blind du joueur
	  string getBlind(int bigBlind);

	  // Setter
	  void setBankroll(int _bankroll);
	  void setCards(QChar cardName1, QChar cardColor1, QChar cardName2, QChar cardColor2);
	  void setIp(QString ip);
	  void setPort(QString port);
	  void setName(QString name);
	  void setAction(int i);
	  void setPosition(int position);
	  void setMise(int mise);
	  void setAmount(int amount);
	  void setAmountRaised(int amountRaised);
	  void setStrategy(QString strategy);
	  void setAmountToCall(int _amountToCall);
	  void setBet(int _bet);
	  void setFitness(int fitness);
      void setCombinationLabel(QString _combinationLabel);

	  // Function
	  string toString(int betOther,int etat, int fitness,int winner);
	  QDomElement toXml(QDomDocument doc);
	  void setAction(QString action);
	  void printHandle();
	  string randomDecision(Player & player);
	  string randomDecisionRaiseOrCheck();
	  string decisionDataBase();
};

#endif
